<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
</html>
<script type="text/javascript">
	// es6创造了for...of 循环
	// 具备iterator接口数据:Array,Arguments,Set,Map,String,TypedArray,Nodelist
	const LIST = ['a','b','c','d'];
	for(let v in LIST){
		 console.log(v)
	}
	for(let v of LIST){
		console.log(v)
	}
	// iterator原理
	// 1.创建一个指针对象，指向当前数据结构起始位置
	// 2.第一次调用对象的next方法，指针自动指向数据结构第一个成员
	// 3.不断调用next方法，指针一直往后移动
	// 每调用一次返回一个包含value和done属性的对象
	let iterator = LIST[Symbol.iterator]();
	console.log(iterator);
	console.log(iterator.next());
	console.log(iterator.next());
	console.log(iterator.next());
	console.log(iterator.next());
	console.log(iterator.next());
	
	
	const BANJI ={
		name:"class1",
		stu:[
			'xiaoming',
			'xiaowang',
			'xiaohong'
		],
		[Symbol.iterator](){
			// 索引变量
			let index = 0;
			let _this = this;
			return{
				next:function(){
					if(index < _this.stu.length){
						const result = {value:_this.stu[index],done:false}
						index++;
						return result;
					}else{
						return{value:undefined,done:true};
					}
				}
			}
		}
	}
	
	for(let v of BANJI){
		console.log(v)
	}
</script>
